package com.study.convention.errorCode;

/**
 * @author canace
 * @version 1.0
 * @description 基础错误码
 * @date 2024/1/22 20:01
 */

public enum BaseErrorCode implements IErrorCode {
    // ========== 一级宏观错误码 客户端错误 ==========
    CLIENT_ERROR("A000001", "用户端错误"),

    TOKEN_IS_NULL("A000002", "token为空"),

    TOKEN_IS_EXPIRE("A000003", "token无效"),

    // ========== 二级宏观错误码 用户注册错误 ==========
    USER_REGISTER_ERROR("A000100", "用户注册错误"),
    USER_NAME_VERIFY_ERROR("A000110", "用户名校验失败"),
    USER_NAME_EXIST_ERROR("A000111", "用户名已存在"),
    USER_NAME_NOT_EXIST_ERROR("A000112", "用户名不存在"),
    USER_NAME_SENSITIVE_ERROR("A000113", "用户名包含敏感词"),
    USER_NAME_SPECIAL_CHARACTER_ERROR("A000114", "用户名包含特殊字符"),

    USER_NAME_IS_BE_BANNED_ERROR("A000115", "用户名已被封禁"),
    USER_IS_NOT_EXIST_ERROR("A000116", "用户不存在"),
    USER_IS_NOT_LOGIN_CURRENT_USER_ERROR("A000117", "用户非当前登录用户"),
    USER_UPDATE_ERROR("A000118", "用户更新失败"),
    PASSWORD_VERIFY_ERROR("A000120", "密码校验失败"),
    PASSWORD_SHORT_ERROR("A000121", "密码长度不够"),
    PHONE_VERIFY_ERROR("A000151", "手机格式校验失败"),

    GROUP_NAME_IS_MAX_ERROR("A000200", "分组数量已达最大"),
    GROUP_CREATE_ERROR("A000201", "分组创建失败"),
    GROUP_NO_SHORT_LINK("A000202", "分组下没有短链接"),
    GROUP_NO_EXIST("A000203", "分组不存在"),
    GROUP_NO_AUTH("A000204", "没有权限操作该分组"),
    GROUP_UPDATE_ERROR("A000205", "分组更新失败"),

    SHORT_LINK_ADD_ERROR("A000301", "短链接新增失败"),
    SHORT_LINK_IS_EXIST_ERROR("A000302", "短链接已存在"),
    SHORT_LINK_GROUP_COUNT_QUERY_ERROR("A000303", "短链接分组数量查询失败"),
    SHORT_LINK_IS_NOT_EXIST_ERROR("A000304", "短链接不存在"),

    RECYCLE_BIN_UPDATE_ERROR("A000401", "回收站内容修改失败"),
    RECYCLE_BIN_PAGE_ERROR("A000402", "回收站分页查询失败"),

    STATS_REMOTE_ERROR("A000501", "远程统计服务调用失败"),
    STATS_INSERT_ERROR("A000502", "统计数据插入失败"),
    STATS_QUERY_ERROR("A000503", "统计数据查询失败"),

    // ========== 二级宏观错误码 系统请求缺少幂等Token ==========
    IDEMPOTENT_TOKEN_NULL_ERROR("A000200", "幂等Token为空"),
    IDEMPOTENT_TOKEN_DELETE_ERROR("A000201", "幂等Token已被使用或失效"),

    // ========== 一级宏观错误码 系统执行出错 ==========
    SERVICE_ERROR("B000001", "系统执行出错"),
    // ========== 二级宏观错误码 系统执行超时 ==========
    SERVICE_TIMEOUT_ERROR("B000100", "系统执行超时"),

    // ========== 一级宏观错误码 调用第三方服务出错 ==========
    REMOTE_ERROR("C000001", "调用第三方服务出错");

    private final String code;

    private final String message;

    BaseErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public String code() {
        return code;
    }

    @Override
    public String message() {
        return message;
    }
}
